const db = require("../db/index");

// bcryptjs 对密码进行加密
const bcrypt = require("bcryptjs");

// jsonwebtoken 生成token包
const jwt = require("jsonwebtoken");

// 全局配置
const config = require("../config");

// 注册账号
exports.reguser = (req, res) => {
  let { username, password } = req.body;
  // 查询名字是否占用
  let sqlStr = "select * from ev_users where username=?";
  db.query(sqlStr, username, (err, results) => {
    if (err) return res.send(err.message);
    if (results.length > 0) {
      return res.cc("用户名不能重复！");
    }
  });

  // 对密码进行加密处理
  password = bcrypt.hashSync(password, 10);

  // 插入新用户
  sqlStr = "insert into ev_users (username,password) values (?,?)";
  db.query(sqlStr, [username, password], (err, results) => {
    if (err) return res.send(err.message);
    if (results.affectedRows !== 1) {
      return res.cc("注册失败！");
    }
    res.cc("注册成功！", 0);
  });
};

// 登录
exports.login = (req, res) => {
  let { username, password } = req.body;
  let sqlStr = "select * from ev_users where username=?";
  db.query(sqlStr, username, (err, results) => {
    if (err) return res.cc(err);
    console.log(results);
    if (results.length !== 1) return res.cc("登录失败！");
    // 密码对比 bcrypt.compareSync(用户提交, 数据库)  返回的是一个bool
    const pasResultsBool = bcrypt.compareSync(password, results[0].password);
    if (!pasResultsBool) return res.cc("登录失败！");
    const user = { ...results[0], password: null, user_pic: null }; // 去掉用户的一些敏感信息
    console.log(user);
    // 生成token jwt.sign(值,加密密钥,配置{expiresIn有效时长})
    let tokenStr = jwt.sign(user, config.jwtSecretKey, {
      expiresIn: config.expiresIn,
    });
    res.send({
      status: "0",
      message: "登录成功！",
      token: "Bearer " + tokenStr,
    });
  });
};
